// axiox 二次封装

import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'

// 创建 axios 实例
const service = axios.create({
  baseURL: 'http://localhost:3030',
  timeout: 5000
})

// 请求拦截
service.interceptors.request.use(config => {
  // 在 请求头中 添加 'X-Token' 字段，发送保存的用户 token 数据给后端
  config.headers['X-Token'] = store.state.token
  return config
})

// 响应拦截
service.interceptors.response.use(res => {
  if (res.status >= 200 && res.status <= 300) {
    // 获取后端接口真实数据
    const { code, data } = res.data
    // 判断
    if (code === 200) {
      // 能够拿到成功数据
      return data
    }

    // token 异常
    if (code === 500 || code === 501 || code === 502) {
      // 显示错误信息
      Message.error({
        message: 'Token 异常，请重新登录'
      })

      // token 失效，会跳转到登录页面重新登录
      store.dispatch('logoutAsync')
      window.location.href = '/login.html'
      return
    }

    // 其他异常
    const err = new Error('接口异常...')
    err.error = res.data
    return Promise.reject(err)
  }

  // 其他异常
  const e = new Error('接口异常...')
  e.error = res.data
  return Promise.reject(e)
})

export default service
